package completablefuture;

import java.util.concurrent.CompletableFuture;

// https://juejin.cn/post/7329796744789721151?utm_source=gold_browser_extension#heading-4
public class CompletableFutureDemo5 {
    /*
    5、任务回调
        CompletableFuture支持某个任务执行完成后，去继续执行一个回调方法。
        我们可以通过 whenComplete()、handle() 方法实现任务回调。两者区别在于：
            whenComplete() 方法没有返回值，且返回的 CompletableFuture 为任务结果，而非回调结果。
            handle() 方法有返回值，且返回的 CompletableFuture 为回调结果。
    * */
    public static void main(String[] args) {
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "返回任务结果33");
        CompletableFuture<String> future1Callback = future1.whenComplete((result, throwable) -> System.out.println("执行回调任务完成，结果是：" + result));
        System.out.println("r1="+future1Callback.join());

        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "返回任务结果11");
        CompletableFuture<String> future2Callback = future2.handle((result, throwable) -> ","+result+"返回回调结果");
        System.out.println(future2Callback.join());
    }
}
